#include <iostream>
#include <string>
#include <fstream>
#include "bundle.h"

int main(int argc, char *argv[]) {
    // 参数检查与帮助提示
    if (argc < 3) {
        std::cerr << "用法: " << argv[0] << " <原始文件路径> <压缩包名称>\n";
        return -1;
    }

    // 文件路径参数
    std::string ifilename = argv[1];
    std::string ofilename = argv[2];

    // 打开输入文件
    std::ifstream ifs(ifilename, std::ios::binary);
    if (!ifs.is_open()) {
        std::cerr << "错误: 无法打开输入文件 '" << ifilename << "'\n";
        return -1;
    }

    // 获取文件大小
    ifs.seekg(0, std::ios::end);
    size_t fsize = ifs.tellg();
    ifs.seekg(0, std::ios::beg);

    // 读取文件内容
    std::string body;
    body.resize(fsize);
    ifs.read(&body[0], fsize);
    
    // 检查是否完全读取
    if (ifs.gcount() != static_cast<int>(fsize)) {
        std::cerr << "错误: 文件读取不完整\n";
        return -1;
    }
    ifs.close();

    // 执行压缩
    std::string packed = bundle::pack(bundle::LZIP, body);

    // 打开输出文件
    std::ofstream ofs(ofilename, std::ios::binary);
    if (!ofs.is_open()) {
        std::cerr << "错误: 无法创建输出文件 '" << ofilename << "'\n";
        return -1;
    }

    // 写入压缩数据
    ofs.write(packed.data(), packed.size());
    ofs.close();

    std::cout << "压缩完成: " << packed.size() << " 字节\n";
    return 0;
}
